package com.wugh.fast.module.async.enums;

import com.wugh.fast.kernel.core.enums.EnumInterface;
import lombok.Getter;
import lombok.ToString;

import java.util.Arrays;
import java.util.Objects;
import java.util.Optional;


/**
 * 枚举:
 *
 * @author wugh
 * @date 2020/4/10 17:00
 */
@ToString
@Getter
public enum TaskStatusEnum implements EnumInterface<Short> {
    /**
     * 1: 初始化
     */
    INIT(1, "初始化"),
    /**
     * 2: 进行中
     */
    PROCESSING(2, "进行中"),
    /**
     * 3: 已完成
     */
    FINISH(3, "已完成"),
    /**
     * 4: 异常
     */
    EXCEPTION(4, "异常"),
    ;

    /**
     * 枚举值
     */
    private Short code;
    /**
     * 说明
     */
    private String desc;

    TaskStatusEnum(Integer code, String desc) {
        this.code = code.shortValue();
        this.desc = desc;
    }

    /**
     * 根据枚举值搜索枚举对象
     *
     * @param code 枚举值
     * @return 返回Optional对象
     */
    public static Optional<TaskStatusEnum> searchByCode(Short code) {
        TaskStatusEnum[] values = TaskStatusEnum.values();
        for (TaskStatusEnum value : values) {
            if (Objects.equals(value.getCode(), code)) {
                return Optional.of(value);
            }
        }
        return Optional.empty();
    }

    public static String getDesc(Short code) {
        Optional<TaskStatusEnum> optional = searchByCode(code);
        return optional.isPresent() ? optional.get().getDesc() : code.toString();
    }

    /**
     * 获取枚举的code数组
     *
     * @return 返回全部枚举的code数组
     */
    public static String[] getCodeArray() {
        return Arrays.stream(TaskStatusEnum.values()).map(e -> e.getCode().toString()).toArray(String[]::new);
    }
}